﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Otgruzka.ServicesClients;
using Common;
using BusinessLogic.Security;
using Otgruzka.Helpers;
using Common.Util;
using System.ServiceModel;


namespace Otgruzka.WebForms
{
    public partial class SendToAuthor : System.Web.UI.Page
    {
        public string Result = "";
        protected string tableOrder = "";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString["oid"] != null)
            {
                // Загрузка данных из БД
                BindOrder();
            }
            BingPromptMessages();
        }

        protected void SendEMail_Click(object sender, EventArgs e)
        {
            this.Result = "true";

            try
            {
                string userID = UserPrincipal.Current.UserId.ToString();
                string emails = this.OrderContactEMail.Value;

                if (!string.IsNullOrEmpty(emails))
                {
                    string body = this.comment.Text;
                    body += "<br /><br />";
                    body += tableOrder;

                    string fromAddressName = UserPrincipal.Current.UserFullName;

                    //// Второй получаеть - куратор со стороны Индепендент Медиа - Галина
                    //var clientSettings = new SettingsClient();
                    //var setting = clientSettings.GetSettingValue("ManagerIndependetEMail");
                    //if (setting != null)
                    //    emails = emails + ", " + setting.SettingValue;
                    #region // Второй получаеть - куратор - ответственный менеджер: Email берется из свойств юр.лица. Если там пусто, то подставляется из системных настроек - таблицы "SystemSettings"
                    if (!string.IsNullOrEmpty(this.OrderManagerEMail.Value))
                        emails = emails + ", " + this.OrderManagerEMail.Value;
                    #endregion // Email ответственного менеджера: берется из свойств юр.лица. Если там пусто, то подставляется из системных настроек - таблицы "SystemSettings"

                    var clientSettings = new SettingsClient();
                    var settingManagerMega = clientSettings.GetSettingValue("ManagerEMail");
                    
                    var processor = new MessageProcessor();
                    processor.ProcessSendMessage(body, emails, fromAddressName, string.Format("Ваш Заказ № {0} был изменен администрацией", this.OrderNumber.Value));
                }
                else
                {
                    ErrorMessage.Text = "В заказе отсутствует адрес электронной почты. Отправка письма невозможна!";
                    this.Result = ErrorMessage.Text;
                }
            }
            catch (Exception ex)
            {
                ErrorMessage.Text = ExceptionHelper<Exception>.GetServiceExceptionMessage(ex);
                this.Result = ErrorMessage.Text;
            }
            ScriptManager.RegisterStartupScript(this, this.GetType(), "close_window", "closeThisWindow('" + this.Result + "')", true);
        }

        private void BindOrder()
        {
            var client = new OrdersClient();
            try
            {
                // Получение ID заказа из адресной строки
                int orderId = Convert.ToInt32(Request.QueryString["oid"]);

                // Получение Заказа из БД
                var order = client.GetOrder(UserPrincipal.Current.UserId, orderId);
                if (order != null)
                {
                    // Формирование HTML с информацией о Заказе, которую надо отобразить на экране 
                    //   и еще запомнить для отсылки в почту

                    // общие данные о Заказе (order.Header)

                    // данные о товарах - спецификация Заказа (order.Specification)
                    tableOrder = ObjectToHtmlHelper.GetOrderHTML(order);
                    this.OrderContactEMail.Value = order.Header.ContactEmail;
                    this.OrderContactName.Value = order.Header.ContactName;
                    this.OrderNumber.Value = order.Header.Number;
                    this.OrderId.Value = order.Header.Id.ToString();
                    #region // Email ответственного менеджера: берется из свойств юр.лица. Если там пусто, то подставляется из системных настроек - таблицы "SystemSettings"
                    var clientSettings = new SettingsClient();
                    var settingIndepMngr = clientSettings.GetSettingValue("ManagerIndependetEMail");
                    string managerIndependetEMail = string.Empty;
                    if (settingIndepMngr != null && !string.IsNullOrEmpty(settingIndepMngr.SettingValue))
                        managerIndependetEMail = settingIndepMngr.SettingValue;
                    if (order.Header != null && order.Header.User != null && order.Header.User.CostsCenter != null && order.Header.User.CostsCenter.Department != null
                        && order.Header.User.CostsCenter.Department.JuridicalPerson != null && !string.IsNullOrEmpty(order.Header.User.CostsCenter.Department.JuridicalPerson.ManagerEMail))
                    {
                        managerIndependetEMail = order.Header.User.CostsCenter.Department.JuridicalPerson.ManagerEMail;
                    }
                    this.OrderManagerEMail.Value = managerIndependetEMail;
                    #endregion // Email ответственного менеджера: берется из свойств юр.лица. Если там пусто, то подставляется из системных настроек - таблицы "SystemSettings"
                }
            }
            catch (System.ServiceModel.FaultException<ExceptionDetail> ex)
            {
                string message = client.GetExceptionDetail(ex);
                this.ErrorMessage.Text = message;
            }
            catch (System.Exception exp)
            {
                this.ErrorMessage.Text = exp.Message;
            }

        }


        /// <summary>
        /// Отображение подсказок из БД
        /// </summary>
        private void BingPromptMessages()
        {
            try
            {
                string[] messages = new PromptMessagesClient().GetPromptMessages(this.AppRelativeVirtualPath.Substring(this.AppRelativeVirtualPath.LastIndexOf("/") + 1)).ToArray();

                if (messages != null && messages.Count() > 0)
                {
                    this.PromptMessagesRepeater.DataSource = messages;
                    this.PromptMessagesRepeater.DataBind();
                    this.PromptMessagesRepeater.Visible = true;
                }
                else
                {
                    this.PromptMessagesRepeater.Visible = false;
                }
            }
            catch (Exception ex)
            {
            }
        }

    }
}